home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 8434 / 8434.xpi / chrome / content / domiOverlay.js < prev    next >
Text File  |  2008-11-15  |  4KB  |  112 lines

  1. var googleredesignedDomi = {
  2. addSelectorMenuItem:function (popup, selector) {
  3.     var menuitem = document.createElementNS(googleredesignedCommon.XULNS, "menuitem");
  4.     menuitem.setAttribute("label", selector);
  5.     menuitem.setAttribute("oncommand", "googleredesignedDomi.copySelectorToClipboard(event)");
  6.     popup.appendChild(menuitem);
  7. },
  8. copySelectorToClipboard:function (event) {
  9.     Components.classes['@mozilla.org/widget/clipboardhelper;1'].getService(Components.interfaces.nsIClipboardHelper).copyString(event.target.getAttribute("label"));
  10. },
  11. generateSelectors:function (event) {
  12.     var node = viewer.selectedNode;
  13.     if (!(node instanceof Element)) {
  14.         return;
  15.     }
  16.     var popup = event.target;
  17.     googleredesignedDomi.addSelectorMenuItem(popup, node.nodeName);
  18.     if (node.hasAttribute("id")) {
  19.         googleredesignedDomi.addSelectorMenuItem(popup, "#" + node.getAttribute("id"));
  20.     }
  21.     if (node.hasAttribute("class")) {
  22.         var classes = node.getAttribute("class").split(/\s+/);
  23.         googleredesignedDomi.addSelectorMenuItem(popup, "." + classes.join("."));
  24.     }
  25.     if (node.attributes.length > 1 ||
  26.         (node.attributes.length == 1 &&
  27.         node.attributes[0].name != "id" &&
  28.         node.attributes[0].name != "class")) {
  29.         var selector = node.nodeName;
  30.         for (var i = 0; i < node.attributes.length; i++) {
  31.             if (node.attributes[i].name != "id") {
  32.                 selector += "[" + node.attributes[i].name + "=\"" + node.attributes[i].value + "\"]";
  33.             }
  34.         }
  35.         googleredesignedDomi.addSelectorMenuItem(popup, selector);
  36.     }
  37.     if (!node.hasAttribute("id")) {
  38.         googleredesignedDomi.addSelectorMenuItem(popup, googleredesignedDomi.getPositionalSelector(node));
  39.     }
  40. },
  41. getParentPositionalSelector:function (node) {
  42.     if (node.parentNode instanceof Document) {
  43.         return "";
  44.     }
  45.     return googleredesignedDomi.getPositionalSelector(node.parentNode) + " > ";
  46. },
  47. getPositionalSelector:function (node) {
  48.     if (node instanceof Document) {
  49.         return "";
  50.     }
  51.     if (node.hasAttribute("id")) {
  52.         return "#" + node.getAttribute("id");
  53.     }
  54.     var uniqueChild = true;
  55.     var nodeName = node.nodeName;
  56.     for (var i = 0; i < node.parentNode.childNodes.length; i++) {
  57.         var currentNode = node.parentNode.childNodes[i];
  58.         if (!(currentNode instanceof Element)) {
  59.             continue;
  60.         }
  61.         if (node != currentNode && node.nodeName == currentNode.nodeName) {
  62.             uniqueChild = false;
  63.             break;
  64.         }
  65.     }
  66.     if (uniqueChild) {
  67.         return googleredesignedDomi.getParentPositionalSelector(node) + node.nodeName;
  68.     }
  69.     if (googleredesignedDomi.isCSSFirstChild(node)) {
  70.         return googleredesignedDomi.getParentPositionalSelector(node) + node.nodeName + ":first-child";
  71.     }
  72.     if (googleredesignedDomi.isCSSLastChild(node)) {
  73.         return googleredesignedDomi.getParentPositionalSelector(node) + node.nodeName + ":last-child";
  74.     }
  75.     var selectorWithinSiblings = "";
  76.     for (var i = 0; i < node.parentNode.childNodes.length; i++) {
  77.         var currentNode = node.parentNode.childNodes[i];
  78.         if (!(currentNode instanceof Element)) {
  79.             continue;
  80.         }
  81.         if (currentNode == node) {
  82.             selectorWithinSiblings += node.nodeName;
  83.             break;
  84.         }
  85.         if (googleredesignedDomi.isCSSFirstChild(currentNode)) {
  86.             selectorWithinSiblings += currentNode.nodeName + ":first-child + ";
  87.         } else {
  88.             selectorWithinSiblings += currentNode.nodeName + " + ";
  89.         }
  90.     }
  91.     return googleredesignedDomi.getParentPositionalSelector(node) + selectorWithinSiblings;
  92. },
  93. isCSSFirstChild:function (node) {
  94.     for (var i = 0; i < node.parentNode.childNodes.length; i++) {
  95.         var currentNode = node.parentNode.childNodes[i];
  96.         if (currentNode instanceof Element) {
  97.             return currentNode == node;
  98.         }
  99.     }
  100.     return false;
  101. },
  102. isCSSLastChild:function (node) {
  103.     for (var i = node.parentNode.childNodes.length - 1; i >= 0; i--) {
  104.         var currentNode = node.parentNode.childNodes[i];
  105.         if (currentNode instanceof Element) {
  106.             return currentNode == node;
  107.         }
  108.     }
  109.     return false;
  110. }
  111. }
  112.